/**
 *  * 这是 LeetCode 第 169. 多数元素 的解决方案
 *  https://leetcode.cn/problems/majority-element
 */
class MajorityElement{

    /**
     * 方法：majorityElement
     *
     * 功能：找出数组中出现次数超过一半的元素（即主元素）。
     *
     * 实现逻辑：
     * - 初始化计数器 `count` 为 0 和候选变量 `candidate` 为 null。
     * - 遍历数组中的每个元素：
     *   - 如果 `count` 为 0，则将当前元素设为 `candidate`。
     *   - 如果当前元素等于 `candidate`，则 `count` 加 1；否则，`count` 减 1。
     * - 最终返回 `candidate` 作为主元素。
     *
     * 时间复杂度：O(n)，其中 n 是数组的长度。算法只需遍历数组一次。
     *
     * 空间复杂度：O(1)，只使用了常数级别的额外空间。
     * @param nums
     * @return
     */
    public static int majorityElement(int[] nums) {
        int count = 0;
        Integer candidate = null;

        for (int num : nums) {
            if (count == 0) {
                candidate = num;
            }
            count += (num == candidate) ? 1 : -1;
        }
        return candidate;
    }
}